package java_thinking.unit_21._21_3;


import net.jcip.annotations.Immutable;

import java.math.BigInteger;
import java.util.Arrays;

/**
 * @Desc:   3-12 对访问多个相关变量出现竞争条件的问题，使用不可变容器类来解决，如果是
 *               可变对象，那必须使用锁来确保原子性
 * @author: cww
 * @DateTime: 2019-06-0@Immutable1 15:42
 */
@Immutable
public class OneValueCache {
    private final BigInteger lastNumber;
    private final BigInteger[] lastFactor;

    public OneValueCache(BigInteger lastNumber, BigInteger[] lastFactor) {
        this.lastNumber = lastNumber;
        this.lastFactor = lastFactor;
    }

    /**
     *  查询结果通过返回一个副本，不可直接返回私有变量的引用，那会逸出
     * @param integer
     * @return
     */
    public BigInteger[] getFactor(BigInteger integer) {
        if (lastNumber == null || !lastNumber.equals(integer))
            return null;
        else
            return Arrays.copyOf(lastFactor, lastFactor.length);
    }
}
